package com.itheima.controller;

import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;


// @Controller: 用来标识当前类是一个控制器类，表示当前类中的方法可以处理请求，响应数据
// @ResponseBody：用来标识当前类中所有方法返回的数据直接写入 HTTP 响应体中，转换为 JSON 格式数据再响应给前端
@RestController
//@Slf4j：用来创建日志对象
@Slf4j
//@RequestMapping：用来标识当前类中的方法可以处理指定的请求
@RequestMapping("/depts")
public class DeptController {

    // 日志，可用@Slf4j代替
    //private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    @Autowired
    DeptService deptService;
    @Autowired
    private EmpService empService;

    //@RequestMapping(value = "/depts",method = RequestMethod.GET)
    @GetMapping
    public Result list() {
        //System.out.println("查询全部部门数据");
        log.info("查询全部部门数据");
        List<Dept> list = deptService.findAll();
        return Result.success(list);
    }

    @DeleteMapping
    //@RequestParam：用来标识请求参数，将请求参数的值映射到方法参数中，当请求参数的参数名和方法参数名一致时，可以省略@RequestParam
    public Result delete(@RequestParam("id")Integer id) {
        //System.out.println("删除部门id为：" + id + "的数据");
        Integer count = empService.selectCountByDeptId(id);
        if (count!=0) {
            return Result.error("对不起，当前部门下有员工，不能直接删除！");
        }
        log.info("删除部门id为{}的数据" , id);
        deptService.deleteById(id);
        return Result.success();
    }

    @PostMapping
    //@RequestBody：用来标识请求体中的JSON数据映射到方法参数中，需要保证请求参数的JSON格式键名和方法参数的属性名一致
    public Result save(@RequestBody Dept dept) {
        log.info("添加部门名称为{}的数据" , dept.getName());
        deptService.save(dept);
        return Result.success();
    }

    @GetMapping("/{id}")
    //@PathVariable：用来标识请求地址中的占位符的值映射到方法参数中,当请求参数的参数名和方法参数名一致时，可以省略@PathVariable的value属性
    public Result getById(@PathVariable("id") Integer id){
        log.info("回显部门id为{}的数据" , id );
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }

    @PutMapping
    public Result update(@RequestBody Dept dept){
        log.info("将部门id为{}的部门名称更改为{}",dept.getId(),dept.getName());
        deptService.update(dept);
        return Result.success();
    }
}
